Best Practices & Recommendations
When initializing the Bluedot SDK at app startup, there are some edge cases where the app doesn’t have network access when the user hasn’t used it in a while. To ensure the Bluedot SDK starts the Geo-triggering and Tempo services correctly, please follow these recommendations:
Whenever the SDK is interacted with (e.g. startGeoTrigger
/startTempo
), Bluedot recommends that the initialization status is checked and initialized if that has not happened yet.
Steps to use Geo-Trigger/Tempo
1. Get ServiceManager
instance.
2. Check for isBluedotServiceInitialized
, if not initialized call serviceManager.initialize(..)
and start Geo-trigger inside Initialize success callback.
3. Inside the InitializationResultListener
, On success reported back from Bluedot, prepare to start Geo-Trigger/Tempo.
val serviceManager = ServiceManager.getInstance(context)
if (!serviceManager.isBluedotServiceInitialized) {
val resultListener = InitializationResultListener { initializationError ->
if (initializationError != null) {
Log.i("TAG", "Initialization Error: " + initializationError.reason)
return@InitializationResultListener
}
Log.i("TAG", "Bluedot Initialization Success")
//Check for GeoTrigger already running
if (!GeoTriggeringService.isRunning()) {
//Start Geo-Trigger
startGeoTriggering(context)
}
//Check for Tempo already running
if (!TempoService.isRunning(context)) {
//or startTempo here
startTempo(context)
}
}
serviceManager.initialize("<YOUR-PROJECT-ID>", resultListener)
} else {
//SDK is already initialized, Now if required start Geo-trigger/Tempo
//Check for GeoTrigger already running
if (!GeoTriggeringService.isRunning()) {
//Start Geo-Trigger
startGeoTriggering(context)
}
//Check for Tempo already running
if (!TempoService.isRunning(context)) {
//or startTempo here
startTempo(context)
}
}
4. Function with an example to start FG mode Geo-trigger
fun startGeoTriggering(context: Context) {
val geoTriggeringStatusListener = GeoTriggeringStatusListener { geoTriggerError: BDError? ->
if (geoTriggerError != null) {
Log.i("TAG", "Bluedot GeoTriggering start error: $geoTriggerError")
return@GeoTriggeringStatusListener
}
Log.i("TAG", "Bluedot GeoTriggering start success")
}
val notification = createNotification(
"foreground_notification_title",
"foreground_notification_text", true, context
)
GeoTriggeringService.builder()
.notification(notification)
.start(context, geoTriggeringStatusListener)
}
5. Function with an example to start Tempo
fun startTempo(context: Context) {
val tempoServiceStatusListener = TempoServiceStatusListener { tempoError: BDError? ->
if (tempoError != null) {
Log.i("TAG", "Bluedot Tempo start error: $tempoError")
return@TempoServiceStatusListener
}
Log.i("TAG", "Bluedot Tempo start success")
}
val notification = createNotification(
"foreground_notification_title", "foreground_notification_text",
true, context
)
TempoService.builder().notification(notification)
.destinationId("<YOUR-PROJECT-DESTINATION-ID>")
.start(context, tempoServiceStatusListener)
}